package com.quan.common.utils;

import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

/**
 * JWTToken工具类
 * @author yhaoquan
 *
 */
public class JwtTokenUtils {
	
	private static Logger logger = LoggerFactory.getLogger(JwtTokenUtils.class);
	
	/**
	 * 使用HS256签名算法和秘钥生成最终的Token,claims中是有效载荷
	 * <br>Map<String, Object> claims = new HashMap<String, Object>() ;
	 * <br>claims.put("sub", "zhangsan") ;
	 * <br>claims.put("ctime", DateUtils.getMillis(new Date()));
	 * <br>claims.put("exp", DateUtils.addMinute(3));
	 * @param claims 有效载荷
	 * @param jwtSecret 秘钥
	 * @return
	 */
	public static String createToken(Map<String, Object> claims, String jwtSecret) {
		String token = Jwts.builder()
				.setClaims(claims)
				.signWith(SignatureAlgorithm.HS256, jwtSecret)
				.compact() ;
		
		return token ;
	}
	
	/**
	 * 解析Token，同时也能验证Token，当验证失败返回null
	 * @param token 
	 * @param jwtSecret 秘钥
	 * @return
	 */
	public static Jws<Claims> parse(String token, String jwtSecret) {
		try {
			Jws<Claims> claimsParse = Jwts.parser().setSigningKey(jwtSecret).parseClaimsJws(token) ;
			return claimsParse ;
		} catch (Exception e) {
			logger.error("Token解析失败：{}", e.getMessage());
			return null ;
		}
	}
	
}
